libp2p-request-response 0.25.3

Generic Request/Response Protocols
Documentation

Generic request/response protocols.

General Usage

The [Behaviour] struct is a [NetworkBehaviour] that implements a generic request/response protocol or protocol family, whereby each request is sent over a new substream on a connection. Behaviour is generic over the actual messages being sent, which are defined in terms of a [Codec]. Creating a request/response protocol thus amounts to providing an implementation of this trait which can then be given to [Behaviour::with_codec]. Further configuration options are available via the [Config].

Requests are sent using [Behaviour::send_request] and the responses received as [Message::Response] via [Event::Message].

Responses are sent using [Behaviour::send_response] upon receiving a [Message::Request] via [Event::Message].

Predefined codecs

In case your message types implement [serde::Serialize] and [serde::Deserialize], you can use two predefined behaviours:

  • [cbor::Behaviour] for CBOR-encoded messages
  • [json::Behaviour] for JSON-encoded messages

Protocol Families

A single [Behaviour] instance can be used with an entire protocol family that share the same request and response types. For that purpose, [Codec::Protocol] is typically instantiated with a sum type.

Limited Protocol Support

It is possible to only support inbound or outbound requests for a particular protocol. This is achieved by instantiating Behaviour with protocols using [ProtocolSupport::Inbound] or [ProtocolSupport::Outbound]. Any subset of protocols of a protocol family can be configured in this way. Such protocols will not be advertised during inbound respectively outbound protocol negotiation on the substreams.